C++ এ ফাংশনে প্যারামিটার পাসিং মূলত দুটি উপায়ে করা যায়: পাস-বাই-ভ্যালু (Pass-by-Value) এবং পাস-বাই-রেফারেন্স (Pass-by-Reference)। প্রতিটি পদ্ধতির নিজস্ব বৈশিষ্ট্য ও সুবিধা রয়েছে এবং এটি নির্ভর করে প্রোগ্রামের প্রয়োজনীয়তার উপর।
পাস-বাই-ভ্যালু হলো প্যারামিটার পাসিং এর একটি পদ্ধতি যেখানে মূল ভ্যারিয়েবলের মানের একটি কপি ফাংশনে পাঠানো হয়। এই পদ্ধতিতে ফাংশনে যে পরিবর্তনই করা হোক না কেন, তা মূল ভ্যারিয়েবলে প্রভাবিত হয় না।
#include <iostream>
using namespace std;
void modifyValue(int x) { // x এর মান কপি হিসেবে পাস হয়েছে
x = 20; // এখানে কেবলমাত্র কপিটি পরিবর্তিত হবে
}
int main() {
int a = 10;
modifyValue(a); // ফাংশনে a এর মান কপি হিসেবে পাস হবে
cout << "Value of a after function call: " << a << endl; // Output: 10
return 0;
}
বর্ণনা:
a
এর মান modifyValue
ফাংশনে পাঠানো হয়েছে, কিন্তু ফাংশনে কেবল a
এর একটি কপি পাঠানো হয়েছে। তাই ফাংশনের ভিতরে x
এর মান পরিবর্তিত হলেও মূল a
এর মান অপরিবর্তিত থাকে।সুবিধা:
অসুবিধা:
পাস-বাই-রেফারেন্স পদ্ধতিতে মূল ভ্যারিয়েবলের রেফারেন্স (অ্যাড্রেস) ফাংশনে পাঠানো হয়। ফলে ফাংশনে যে পরিবর্তন করা হয়, তা সরাসরি মূল ভ্যারিয়েবলে প্রতিফলিত হয়। এই পদ্ধতিতে &
(অ্যাম্পারস্যান্ড) চিহ্ন ব্যবহার করে রেফারেন্স পাস করা হয়।
#include <iostream>
using namespace std;
void modifyValue(int &x) { // x এর রেফারেন্স পাস হয়েছে
x = 20; // এখানে মূল ভ্যারিয়েবল পরিবর্তিত হবে
}
int main() {
int a = 10;
modifyValue(a); // ফাংশনে a এর রেফারেন্স পাস করা হচ্ছে
cout << "Value of a after function call: " << a << endl; // Output: 20
return 0;
}
বর্ণনা:
a
এর রেফারেন্স modifyValue
ফাংশনে পাঠানো হয়েছে। তাই ফাংশনে x
এর মাধ্যমে a
এর আসল মান পরিবর্তিত হয়। আউটপুটে দেখা যাবে যে a
এর মান ১০ থেকে ২০ তে পরিবর্তিত হয়েছে।সুবিধা:
অসুবিধা:
বৈশিষ্ট্য | পাস-বাই-ভ্যালু | পাস-বাই-রেফারেন্স |
---|---|---|
ডেটা কপি | হ্যাঁ, ডেটার কপি পাস হয় | না, সরাসরি রেফারেন্স পাস হয় |
মূল ডেটার উপর প্রভাব | মূল ডেটা পরিবর্তিত হয় না | মূল ডেটা সরাসরি পরিবর্তিত হয় |
মেমোরি ব্যবহার | বেশি মেমোরি ব্যবহার করে | মেমোরি সাশ্রয়ী |
বড় ডেটা টাইপের ক্ষেত্রে | কম কার্যকর | বেশি কার্যকর |
ব্যবহারিক ক্ষেত্র | যখন মূল ডেটা অপরিবর্তিত রাখা প্রয়োজন | যখন মূল ডেটা পরিবর্তন প্রয়োজন |
যখন আমরা রেফারেন্স পাস করতে চাই কিন্তু ফাংশনে ডেটা পরিবর্তন করতে চাই না, তখন const reference ব্যবহার করা হয়। এটি ডেটা নিরাপত্তা নিশ্চিত করে।
#include <iostream>
using namespace std;
void displayValue(const int &x) { // const রেফারেন্স ব্যবহার করা হয়েছে
cout << "Value: " << x << endl;
// x = 20; // এটি একটি ত্রুটি, কারণ x কন্সট্যান্ট রেফারেন্স
}
int main() {
int a = 10;
displayValue(a);
return 0;
}
বর্ণনা:
displayValue
ফাংশনে a
এর কন্সট্যান্ট রেফারেন্স পাস করা হয়েছে। এতে করে x
এর মাধ্যমে a
এর মান দেখা যাবে কিন্তু কোনো পরিবর্তন করা যাবে না।ফাংশনে প্যারামিটার পাস করার পদ্ধতি নির্ভর করে প্রোগ্রামের প্রয়োজনীয়তা এবং মেমোরি ব্যবহারের দক্ষতার উপর।
common.read_more